fix a bug in the gpx reader that could cause the character data from the wrong elemen...
authortsteven4 <tsteven4@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Thu, 22 Aug 2013 01:19:47 +0000 (01:19 +0000)
committertsteven4 <tsteven4@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Thu, 22 Aug 2013 01:19:47 +0000 (01:19 +0000)
gpsbabel/gpx.cc
gpsbabel/reference/multiple-links-2.gpx [new file with mode: 0644]
gpsbabel/reference/multiple-links-2~gpx.gpx [new file with mode: 0644]
gpsbabel/testo.d/multiurlgpx.test

index 05e0bb9dd9286c776a89993c97890136602ce4e3..e7b2a998b79931e7001ef94c0635c4d266f3467a 100644 (file)
@@ -58,7 +58,7 @@ static gpsbabel::File* oqfile;
 static gpsbabel::XmlStreamWriter* writer;
 static short_handle mkshort_handle;
 static const char* link_url;
-static char* link_text;
+static char* link_text = NULL;
 
 static const char* input_string = NULL;
 static int input_string_len = 0;
@@ -690,9 +690,6 @@ gpx_start(void* data, const XML_Char* xml_el, const XML_Char** xml_attr)
       link_url = attr[1];
     }
     break;
-  case tt_wpt_link_text:
-    link_text = cdatastr.mem;
-    break;
   case tt_rte:
     rte_head = route_head_alloc();
     route_add_head(rte_head);
@@ -1203,16 +1200,19 @@ gpx_end(void* data, const XML_Char* xml_el)
   case tt_wpt_link:
 //TODO: implement GPX 1.1      case tt_trk_trkseg_trkpt_link:
 //TODO: implement GPX 1.1      case tt_rte_rtept_link:
-  {
-    char* lt = link_text;
-    if (lt) {
-      lt = xstrdup(lrtrim(link_text));
+    waypt_add_url(wpt_tmp, link_url, link_text);
+    if (link_text) {
+      xfree(link_text);
+      link_text = NULL;
     }
-
-    waypt_add_url(wpt_tmp, link_url, lt);
-    link_text = NULL;
-  }
-  break;
+    break;
+  case tt_wpt_link_text:
+    if (cdatastrp[0]) {
+      link_text = xstrdup(lrtrim(cdatastrp));
+    } else {
+      link_text = NULL;
+    }
+    break;
   case tt_unknown:
     end_something_else();
     current_tag.truncate(pos);
diff --git a/gpsbabel/reference/multiple-links-2.gpx b/gpsbabel/reference/multiple-links-2.gpx
new file mode 100644 (file)
index 0000000..4162e12
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx version="1.1" creator="GPSBabel - http://www.gpsbabel.org" xmlns="http://www.topografix.com/GPX/1/1">
+  <metadata>
+    <time>1970-01-01T00:00:00Z</time>
+    <bounds minlat="21.278604576" minlon="-157.810719665" maxlat="21.278604576" maxlon="-157.810719665"/>
+  </metadata>
+  <wpt lat="21.278604576" lon="-157.810719665">
+    <time>2007-03-10T22:41:34Z</time>
+    <name>001</name>
+    <cmt>3348 Martha St</cmt>
+    <desc>3348 Martha St</desc>
+    <link href="www.zero.com"/>
+    <link href="www.one.com">
+      <text>one</text>
+      <type> not me </type>
+    </link>
+    <link href="www.two.com">
+      <text>  two dots  </text>
+    </link>
+    <link href="www.twoandahalf.com"/>
+    <link href="www.three.com">
+      <text>three dots</text>
+    </link>
+    <link href="www.four.com">
+      <text></text>
+    </link>
+    <sym>Waypoint</sym>
+    <extensions>
+      <gpxx:WaypointExtension xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3">
+        <gpxx:DisplayMode>SymbolAndDescription</gpxx:DisplayMode>
+      </gpxx:WaypointExtension>
+    </extensions>
+  </wpt>
+</gpx>
diff --git a/gpsbabel/reference/multiple-links-2~gpx.gpx b/gpsbabel/reference/multiple-links-2~gpx.gpx
new file mode 100644 (file)
index 0000000..f5b2bab
--- /dev/null
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gpx version="1.1" creator="GPSBabel - http://www.gpsbabel.org" xmlns="http://www.topografix.com/GPX/1/1">
+  <metadata>
+    <time>1970-01-01T00:00:00Z</time>
+    <bounds minlat="21.278604576" minlon="-157.810719665" maxlat="21.278604576" maxlon="-157.810719665"/>
+  </metadata>
+  <wpt lat="21.278604576" lon="-157.810719665">
+    <time>2007-03-10T22:41:34Z</time>
+    <name>001</name>
+    <cmt>3348 Martha St</cmt>
+    <desc>3348 Martha St</desc>
+    <link href="www.zero.com"/>
+    <link href="www.one.com">
+      <text>one</text>
+    </link>
+    <link href="www.two.com">
+      <text>two dots</text>
+    </link>
+    <link href="www.twoandahalf.com"/>
+    <link href="www.three.com">
+      <text>three dots</text>
+    </link>
+    <link href="www.four.com"/>
+    <sym>Waypoint</sym>
+    <extensions>
+      <gpxx:WaypointExtension xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3">
+        <gpxx:DisplayMode>SymbolAndDescription</gpxx:DisplayMode>
+      </gpxx:WaypointExtension>
+    </extensions>
+  </wpt>
+</gpx>
index 586aa4263023209f5d9532cb36df32d605600199..32bcbdef85483f36214f1ce7a1faaf66da156fd7 100644 (file)
@@ -5,3 +5,6 @@ rm -f ${TMPDIR}/mlink*
 gpsbabel -i gpx -f ${REFERENCE}/multiple-links.gpx -o gpx,gpxver=1.1 -F ${TMPDIR}/mlink-1.gpx
 compare ${REFERENCE}/multiple-links.gpx ${TMPDIR}/mlink-1.gpx 
 
+# test some more complicated gpx 1.1 linkTypes and a link with an empty text element
+gpsbabel -i gpx -f ${REFERENCE}/multiple-links-2.gpx -o gpx,gpxver=1.1 -F ${TMPDIR}/mlink-2.gpx
+compare ${REFERENCE}/multiple-links-2~gpx.gpx ${TMPDIR}/mlink-2.gpx